উদাহরণ সহ PreparedStatement এর ব্যবহার

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এ PreparedStatement ব্যবহার |
72
72

NamedParameterJdbcTemplate হলো JdbcTemplate এর একটি সম্প্রসারণ, যা SQL কুয়েরিতে নামযুক্ত প্যারামিটার (Named Parameters) ব্যবহার করার সুবিধা প্রদান করে। সাধারণ JdbcTemplate এর মাধ্যমে SQL কুয়েরি লেখা হয় যেখানে প্যারামিটারগুলো পজিশনাল (Positional Parameters) হিসেবে প্রদান করা হয় (যেমন ? ব্যবহার করা হয়)। কিন্তু NamedParameterJdbcTemplate এর মাধ্যমে SQL কুয়েরিতে প্যারামিটারগুলো নাম দিয়ে উল্লেখ করা হয়, যেমন :paramName

এই পদ্ধতিটি SQL কুয়েরি আরো পরিষ্কার, রিডেবল এবং নিরাপদ করে তোলে। বিশেষ করে যখন অনেক প্যারামিটার থাকে, তখন নামযুক্ত প্যারামিটার ব্যবহার করা কোডের মান এবং রক্ষণাবেক্ষণ সহজ করে।

NamedParameterJdbcTemplate এর সুবিধা:

  1. নামযুক্ত প্যারামিটার: কোডের মধ্যে প্যারামিটার ব্যবহারের সময় স্পষ্টতা বজায় থাকে। SQL কুয়েরিতে প্যারামিটারগুলো সরাসরি নামের মাধ্যমে উল্লেখ করা হয়, যেমন :id, :name ইত্যাদি।
  2. ক্লিনার কোড: পজিশনাল প্যারামিটার ব্যবহার করার থেকে নামযুক্ত প্যারামিটার ব্যবহার করা সহজ এবং আরও পরিষ্কার।
  3. নিরাপত্তা: নামযুক্ত প্যারামিটার SQL ইনজেকশন থেকে সুরক্ষা প্রদান করে, কারণ এটি SQL কুয়েরির মধ্যে ডেটা প্রবাহকে আরও সঠিকভাবে নিয়ন্ত্রণ করে।

NamedParameterJdbcTemplate ব্যবহারের উদাহরণ:

১. কনফিগারেশন এবং DataSource সেটআপ:

import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;

public class DataSourceConfig {
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }
}

২. NamedParameterJdbcTemplate ব্যবহার করে ডেটাবেস অপারেশন:

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

public class EmployeeDao {
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    // DataSource Inject করা হচ্ছে
    public void setDataSource(DataSource dataSource) {
        this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }

    // ইনসার্ট অপারেশন: নামযুক্ত প্যারামিটার ব্যবহার
    public void insertEmployee(Employee employee) {
        String sql = "INSERT INTO employee (id, name, age) VALUES (:id, :name, :age)";
        
        Map<String, Object> params = new HashMap<>();
        params.put("id", employee.getId());
        params.put("name", employee.getName());
        params.put("age", employee.getAge());

        namedParameterJdbcTemplate.update(sql, params);
    }

    // ডেটাবেস থেকে এক্সিকিউট করা কুয়েরি: নামযুক্ত প্যারামিটার ব্যবহার
    public Employee getEmployeeById(int id) {
        String sql = "SELECT * FROM employee WHERE id = :id";
        
        Map<String, Object> params = new HashMap<>();
        params.put("id", id);

        return namedParameterJdbcTemplate.queryForObject(sql, params, new EmployeeRowMapper());
    }
}

কীভাবে কাজ করে:

  1. SQL কুয়েরি: SQL কুয়েরিতে নামযুক্ত প্যারামিটার ব্যবহার করা হয়েছে, যেমন :id, :name, :age
  2. Map<String, Object>: একটি Map তৈরি করা হয়েছে, যেখানে SQL প্যারামিটারগুলির নাম (যেমন id, name, age) কীগুলি এবং তাদের মান মানগুলি হিসেবে স্টোর করা হয়েছে।
  3. MapSqlParameterSource (অপশনাল): Map<String, Object> এর পরিবর্তে MapSqlParameterSource ব্যবহার করেও নামযুক্ত প্যারামিটার পাস করা যায়, যা আরো সুবিধাজনক এবং স্পষ্ট।

MapSqlParameterSource ব্যবহার উদাহরণ:

import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;

public void insertEmployee(Employee employee) {
    String sql = "INSERT INTO employee (id, name, age) VALUES (:id, :name, :age)";

    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue("id", employee.getId());
    params.addValue("name", employee.getName());
    params.addValue("age", employee.getAge());

    namedParameterJdbcTemplate.update(sql, params);
}

এখানে MapSqlParameterSource ব্যবহার করা হয়েছে যা Map<String, Object> এর থেকে আরও ক্লিন এবং সুবিধাজনক।

প্রধান উপকারিতা:

  • রিডেবিলিটি: নামযুক্ত প্যারামিটার কোডের রিডেবিলিটি বাড়ায়, কারণ প্যারামিটারগুলি SQL কুয়েরির মধ্যে স্পষ্টভাবে উল্লেখ করা হয়।
  • কমপ্লেক্স কুয়েরি ম্যানেজমেন্ট: একাধিক প্যারামিটার এবং জটিল কুয়েরি ব্যবস্থাপনা সহজ হয়।
  • ফলস/নাল সুরক্ষা: নামযুক্ত প্যারামিটারগুলি নাল (null) ভ্যালু সমর্থন করে এবং SQL ইনজেকশনের বিরুদ্ধে আরও সুরক্ষা প্রদান করে।

উপসংহার:

স্প্রিং জেডিবিসি এর NamedParameterJdbcTemplate নামযুক্ত প্যারামিটার ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন আরও সহজ, পরিষ্কার এবং নিরাপদ করে তোলে। এটি কোডের রিডেবিলিটি এবং রক্ষণাবেক্ষণ সহজ করে এবং বিশেষত জটিল কুয়েরি ও প্যারামিটার ব্যবস্থাপনার ক্ষেত্রে খুবই কার্যকর।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion